home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 010 / sargeant.arc / 752X410.ASM < prev    next >
Assembly Source File  |  1986-09-12  |  4KB  |  171 lines

  1. ;------    VEGA HiRes (752x410) Data:
  2.  
  3. Vega_Seg    segment at 0C000h    ;VEGA ROM Segment
  4.         org    028h
  5. mul8_addr    label    word        ;Address of emulation routine
  6.         org    02Ah
  7. version     label    byte        ;Version string
  8.         org    03FFEh
  9. feature        label    byte        ;Feature flags
  10. Vega_Seg    ends
  11.  
  12.  
  13. VerChk    db    'VEGA BIOS Code, ',0    ;VEGA BIOS Version string subset
  14.  
  15. ;
  16. ;    Alt. Mode 10: 752 x 410 16-color graphics (>64k ram):
  17. ;
  18. HiRes_Params    label    byte
  19.     db    80, 36, 14
  20.     dw    0B400h
  21.     db    001h, 00Fh, 000h, 006h
  22.     db    0ABh
  23.     db    076h, 05Dh, 061h, 031h, 061h, 00Dh
  24.     db    0A8h, 01Fh, 000h, 000h, 000h, 000h
  25.     db    000h, 000h, 000h, 000h, 09Ah, 026h
  26.     db    099h, 02Fh, 00Fh, 09Bh, 008h, 0E3h
  27.     db    0FFh
  28.     db    000h, 001h, 002h, 003h, 004h, 005h
  29.     db    014h, 007h, 038h, 039h, 03Ah, 03Bh
  30.     db    03Ch, 03Dh, 03Eh, 03Fh, 001h, 000h
  31.     db    00Fh, 000h
  32.     db    000h, 000h, 000h, 000h, 000h, 000h
  33.     db    005h, 00Fh, 0FFh
  34.  
  35.  
  36. Emulate label    dword            ;Far pointer to Emulate routine
  37. EmulOff    dw    0
  38. EmulSeg    dw    0
  39.  
  40. ;------    End of VEGA Data...
  41.  
  42. ;========================================================================
  43.  
  44. ;------    VEGA HiRes (752x410) Code:
  45.  
  46. ;
  47. ;    Check EGA ROM for VEGA BIOS version string, and 24 Mhz clock feature
  48. ;
  49. ;    Exit:    Carry set:    VEGA Deluxe found
  50. ;        Carry clear:    VEGA Deluxe not found
  51. ;
  52. Check_Vega    proc    near
  53.  
  54.     push    ax            ;Save regs
  55.     push    bx
  56.     push    cx
  57.     push    si
  58.     push    di
  59.     push    ds
  60.     push    es
  61.     cld                ;Strings go forward
  62.  
  63.     mov    ah,12H            ;Bios alternate select
  64.     mov    bl,10H            ;Return EGA information
  65.     int    10H
  66.     or    bh,bh            ;check for color monitor
  67.     jnz    Chk_Fail        ;if bh=1, mono monitor
  68.  
  69.     push    cs            ;Copy code seg
  70.     pop    ds            ;into data seg.
  71.     mov    ax,Vega_Seg        ;Get VEGA ROM seg
  72.     mov    es,ax            ;copy into ES
  73.     assume    es:Vega_Seg
  74.  
  75.     lea    di,version        ;Point at ROM version string
  76.     lea    si,VerChk        ;Point at version string subset
  77. Chk_Loop:
  78.     lodsb                ;Get source byte
  79.     or    al,al            ;End of string?
  80.     jz    Chk_Equal        ;If at end, set carry (Equal)
  81.     cmp    al,es:[di]        ;Does this byte match?
  82.     jne    Chk_Fail        ;No, exit (Not Equal)
  83.     inc    di            ;Yes, advance dest pointer
  84.     jmp    Chk_Loop        ;Loop over source string
  85. Chk_Fail:
  86.     clc                ;else clear carry
  87.     jmp    short Chk_Exit        ;and exit
  88. Chk_Equal:
  89.     test    es:feature,1        ;Is this a "Deluxe" VEGA?
  90.     jz    Chk_Fail        ;No, can't do sexy hires modes
  91.     stc                ;Yes, Set carry flag
  92. Chk_Exit:
  93.     pop    es            ;Restore regs
  94.     assume    es:Nothing
  95.     pop    ds
  96.     assume    ds:Nothing
  97.     pop    di
  98.     pop    si
  99.     pop    cx
  100.     pop    bx
  101.     pop    ax
  102.  
  103.     ret
  104.  
  105. Check_Vega    endp
  106.  
  107.  
  108. ;
  109. ;    Set VEGA HiRes (752x410) mode
  110. ;
  111. Set_Hires    proc    near
  112.  
  113.     push    es            ;Save registers
  114.     push    bp
  115.     push    di
  116.     push    si
  117.     push    dx
  118.     push    bx
  119.     push    ax
  120.  
  121.     mov    bx,Vega_Seg        ;Setup to get Vega Segment
  122.     mov    es,bx
  123.     assume    es:Vega_Seg
  124.  
  125.     mov    bx,es:Mul8_addr        ;Get offset of emulation routine
  126.     mov    cs:EmulOff,bx        ;Save offset
  127.     mov    cs:EmulSeg,es        ;and segment
  128.  
  129.     push    cs            ;Copy code segment
  130.     pop    es            ;into ES
  131.     lea    di,HiRes_Params     ;Get address of HiRes parameters
  132.     mov    dx,3D4h         ;Get CRT port address
  133.     mov    ax,9            ;Get special mode
  134.     call    cs:Emulate        ;Set EGA registers from param table
  135.  
  136.     mov    ax,040H            ;Get the bios data segment
  137.     mov    es,ax
  138.     mov    word ptr es:[4AH],94    ;Set the number of columns
  139.     mov    byte ptr es:[84H],28    ;Set the number of rows
  140.  
  141.     call    Pal_On            ;Turn the palette on
  142.  
  143.     pop    ax            ;Restore registers
  144.     pop    bx
  145.     pop    dx
  146.     pop    si
  147.     pop    di
  148.     pop    bp
  149.     pop    es
  150.     assume    es:Nothing
  151.     ret                ;Return
  152.  
  153. Set_Hires    endp
  154.  
  155. ;
  156. ;    Turn Palette On
  157. ;
  158. Pal_On    proc    near
  159.  
  160.     mov    dx,3DAh            ;Get status port address (Color)...
  161.     in    al,dx            ;Set attribute flip-flop
  162.     mov    dx,3C0h
  163.     mov    al,20h
  164.     out    dx,al            ;Enable palette
  165.     ret
  166.  
  167. Pal_On    endp
  168.  
  169.  
  170. ;------    End of VEGA Code...
  171.